package com.english.controller.admin;

import com.english.entity.User;
import com.english.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 管理员控制器基类
 * 提供统一的管理员权限校验方法
 *
 * @author wlq
 * @since 2025-08-04
 */
public abstract class AdminBaseController {

    @Autowired
    protected UserMapper userMapper;

    /**
     * 获取管理员ID，自动校验管理员权限
     * @param token 用户token
     * @return 管理员ID
     * @throws RuntimeException 如果不是管理员或token无效
     */
    protected Long getAdminId(String token) {
        Long userId = getUserIdFromToken(token);
        if (userId == null) {
            throw new RuntimeException("无效token");
        }

        User user = userMapper.selectById(userId);
        if (user == null || user.getRole() != 1) {
            throw new RuntimeException("只有管理员才能操作");
        }

        return userId;
    }

    /**
     * 获取学生ID，自动校验学生权限
     * @param token 用户token
     * @return 学生ID
     * @throws RuntimeException 如果不是学生或token无效
     */
    protected Long getStudentId(String token) {
        Long userId = getUserIdFromToken(token);
        if (userId == null) {
            throw new RuntimeException("无效token");
        }

        User user = userMapper.selectById(userId);
        if (user == null || user.getRole() != 0) {
            throw new RuntimeException("只有学生才能操作");
        }

        return userId;
    }

    /**
     * 从token中解析用户ID
     * @param token 用户token
     * @return 用户ID
     */
    protected Long getUserIdFromToken(String token) {
        if (token != null && token.startsWith("Bearer ")) {
            token = token.substring(7);
        }
        if (token != null && token.startsWith("token_")) {
            String[] parts = token.split("_");
            if (parts.length >= 2) {
                String wechatId = parts[1];
                User user = userMapper.selectByWechatId(wechatId);
                return user != null ? user.getId() : null;
            }
        }
        return null;
    }
}
